package top.goldenyear.porpoise.framework.web.core.generator.config;

import cn.hutool.v7.core.array.ArrayUtil;
import cn.hutool.v7.core.collection.CollUtil;
import cn.hutool.v7.core.text.StrUtil;
import java.util.*;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 业务域配置
 *
 * @author airhead
 */
@Data
@Accessors(chain = true)
@SuppressWarnings("unused")
public class DomainConfig {
  private String biz;
  private String domain;

  /** 生成哪些表，一个业务模型下包几个表 */
  private Set<String> tables = new HashSet<>();

  /** 单独为某张表添加独立的配置 -- GETTER -- 获取表配置 */
  private Map<String, TableConfig> tableConfigMap = new HashMap<>();

  /** 数据库表 */
  private String tablePrefix;

  public static DomainConfig of() {
    return new DomainConfig();
  }

  /** 设置生成哪些表 */
  public DomainConfig addTable(String... tables) {
    if (ArrayUtil.isEmpty(tables)) {
      return this;
    }

    for (String table : tables) {
      table = StrUtil.trim(table);
      if (StrUtil.isBlank(table)) {
        continue;
      }

      this.tables.add(table);
    }

    return this;
  }

  public DomainConfig addTableConfig(TableConfig... tableConfigs) {
    if (CollUtil.isEmpty(Arrays.asList(tableConfigs))) {
      return this;
    }

    for (TableConfig tableConfig : tableConfigs) {
      String table = StrUtil.trim(tableConfig.getTableName());
      if (StrUtil.isBlank(table)) {
        continue;
      }

      tables.add(table);
      tableConfigMap.put(table, tableConfig);
    }

    return this;
  }
}
